// // 示例1-绑定方法
// int add(int i, int j) {
//   return i + j;
// }

// // 示例2-绑定类
// struct Pet {
//   Pet(const std::string& name_) : name(name_) {}
//   void setName(const std::string& name_) { name = name_; }
//   const std::string& getName() const { return name; }
//   std::string name;

//   static const int getValue() { return value; }
//   static int value;
// };

// int Pet::value = 10;

// // 示例3-绑定私有方法
// struct Pet_2 {
//   Pet_2(const std::string& name_) : name(name_) {}
//   void setName(const std::string& name_) { name = name_; }
//   const std::string& getName() const { return name; }

//  private:
//   std::string name;

//   static const int getValue() { return value; }
//   static int value;
// };

// // 示例4-绑定继承类
// struct Parent {
//   Parent(const std::string& name_) : name(name_) {}
//   std::string name;
// };

// struct Dog : public Parent {
//   Dog(const std::string& name) : Parent(name) {}
//   std::string bark() const { return "woof!"; }
// };

// // 示例5-绑定重载函数
// struct Pet_3 {
//   Pet_3(std::string name_, int age_) : name(name_), age(age_) {}

//   // 参数类型不同-重载
//   void set(std::string name_) { name = name_; }
//   void set(int age_) { age = age_; }

//   // const-重载
//   int& getAge() { return age; }
//   const int& getAge() const { return age; }

//   std::string name;
//   int age;
// };

// // 示例6-枚举和内部类型
// struct Pet_4 {
//   enum Kind { Dog = 0, Cat };

//   struct Attributes {
//     float age = 0;
//   };

//   Pet_4(const std::string& name, Kind type) : name(name), type(type) {}

//   std::string name;
//   Kind type;
//   Attributes attr;
// };

// PYBIND11_MODULE(qlibpy_test, m) {
//   // 模块名称描述，可通过help打印
//   m.doc() = "pybind11 qlib module";

//   // 示例1-为模块绑定C++方法，参数：[方法名，方法地址，方法描述，方法参数(名称-默认值)]
//   m.def("add", &add, "A function that adds two numbers", py::arg("i") = 1, py::arg("j") = 2);

//   // 为模块添加变量
//   std::string str = "Hello!";
//   m.attr("str") = py::cast(str);

//   // 示例2-为模块绑定类
//   py::class_<Pet>(m, "Pet")
//       .def(py::init<const std::string&>())  // 类初始化方法
//       .def("setName", &Pet::setName)        // 类成员方法
//       .def("getName", &Pet::getName)
//       .def_static("getValue", &Pet::getValue)                                                       // 类静态方法
//       .def("__repr__", [](const Pet& a) { return "qlib class pet, object name: " + a.getName(); })  // 修改python print(Pet)打印结果
//       .def_readwrite("name", &Pet::name)                                                            // 直接绑定类成员属性
//       .def_readwrite_static("value", &Pet::value);                                                  // 绑定类静态属性

//   // 示例3
//   py::class_<Pet_2>(m, "Pet_2", py::dynamic_attr())  // 启用动态属性，即python可增加此对象属性
//       .def(py::init<const std::string&>())
//       .def_property("name", &Pet_2::getName, &Pet_2::setName)  // 类私有字段的绑定
//       .def("__repr__", [](const Pet_2& a) { return "qlib class pet_2, object name: " + a.getName(); });

//   // 示例4-继承类的绑定
//   py::class_<Parent>(m, "Parent").def(py::init<const std::string&>()).def_readwrite("name", &Parent::name);

//   py::class_<Dog, Parent>(m, "Dog").def(py::init<const std::string&>()).def("bark", &Dog::bark);

//   // 示例5-重载函数的绑定
//   py::class_<Pet_3>(m, "Pet_3")
//       .def(py::init<const std::string&, int>())
//       .def_readwrite("name", &Pet_3::name)
//       .def("set", py::overload_cast<int>(&Pet_3::set), "Set the pet's age")
//       .def("set", py::overload_cast<std::string>(&Pet_3::set), "Set the pet's age")
//       .def_readwrite("age", &Pet_3::age)
//       .def("getAge", py::overload_cast<>(&Pet_3::getAge), "get age refer")
//       .def("getAge", py::overload_cast<>(&Pet_3::getAge, py::const_), "get age const refer");

//   // 示例6-枚举和内部类型
//   py::class_<Pet_4> pet_4(m, "Pet_4");
//   pet_4.def((py::init<const std::string&, Pet_4::Kind>()));
//   pet_4.def_readwrite("name", &Pet_4::name);
//   pet_4.def_readwrite("type", &Pet_4::type);
//   pet_4.def_readwrite("attr", &Pet_4::attr);

//   py::enum_<Pet_4::Kind>(pet_4, "Kind").value("Dog", Pet_4::Kind::Dog).value("Cat", Pet_4::Kind::Cat).export_values();

//   py::class_<Pet_4::Attributes>(pet_4, "Attributes").def(py::init<>()).def_readwrite("age", &Pet_4::Attributes::age);

//   // 示例7-实战
//   // py::class_<Library,std::shared_ptr<Library>> pybind_library(m,"Library");
//   // pybind_library.def(py::init<const std::string &>());
//   // pybind_library.def_readwrite("unit",&Library::unit);
// }